延續昨天的launch檔,今天來講解同樣身為xml檔的package.xml
吧~
package.xml是在做ros catkin_create_package
時預先建好的檔案,目的是為了讓ROS系統能辨識此package。package.xml可以想成是該package的描述檔,其定義了package的名稱、版本號、相依套件等,基本會出現的tag如下:
<name>
- package 名稱<version>
- 此package的版本號(使用3點式命名,e.g. 1.12.0)<description>
- 簡單描述此package的用途<maintainer>
- 有在維護此package的人名<license>
- 釋出程式碼的軟體許可證(e.g. GPL,BSD,ASL)<author>
- 原作者名<url>
- 介紹此package的網站連結,可以放在這邊供人參考現在package.xml支援兩種格式,ROS官方建議使用第二種,不過使用舊的也可以兼容,所以我就兩個都介紹吧~
<package format="2">
<name>foo_core</name>
<version>1.2.4</version>
<description>
This package provides foo capability.
</description>
<maintainer email="ivana@willowgarage.com">Ivana Bildbotz</maintainer>
<license>BSD</license>
<url>http://ros.org/wiki/foo_core</url>
<author>Ivana Bildbotz</author>
<buildtool_depend>catkin</buildtool_depend>
<depend>roscpp</depend>
<depend>std_msgs</depend>
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>rospy</exec_depend>
<test_depend>python-mock</test_depend>
<doc_depend>doxygen</doc_depend>
</package>
除了既有描述package檔的標籤,下方便是描述相依模組的標籤,主要分為六項:
<build_depend>
- 在編譯此package之前,需要事先編譯的其他package<build_export_depend>
- 編譯此package時會include的lib名稱,通常也會加在cMakeList的CATKIN_DEPENDS中<exec_depend>
- 編譯此package時會需要執行的其他package的程式,通常也會加在cMakeList的CATKIN_DEPENDS中<test_depend>
- 在unit test中使用,這個標籤內所定義的package不該出現在其他標籤中<buildtool_depend>
- 在編譯此package之前需要使用的編譯工具,通常只需要catkin<doc_depend>
- 此package需要產生的文件格式,如doxygen<depend>
- 這個標籤可以涵蓋前面的build_depend
,<build_export_depend>
和exec_depend
,是最常用的標籤之一<?xml version="1.0"?>
<package>
<name>beginner_tutorials</name>
<version>0.1.0</version>
<description>The beginner_tutorials package</description>
<maintainer email="you@yourdomain.tld">Your Name</maintainer>
<license>BSD</license>
<url type="website">http://wiki.ros.org/beginner_tutorials</url>
<author email="you@yourdomain.tld">Jane Doe</author>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
</package>
一樣除了既定的標籤外,定義相依模組的標籤為:
<buildtool_depend>
- 跟格式二的<buildtool_depend>
一樣<build_depend>
- 跟格式二的<build_depend>
一樣<run_depend>
- 跟格式二的<exec_depend>
一樣<test_depend>
- 跟格式二的<test_depend>
一樣可以看到,新版本跟舊版本的差別主要在於沒有<build_export_depend>
和<doc_depend>
,若想知道更多的差別,可以參考此篇官方介紹
http://wiki.ros.org/catkin/package.xml
https://blog.csdn.net/wengge987/article/details/50614386
https://www.itread01.com/content/1548087310.html
https://docs.ros.org/melodic/api/catkin/html/howto/format2/migrating_from_format_1.html#migrating-from-format1-to-format2